//导入数据库操作模块
const { result } = require("@hapi/joi/lib/base");
const query = require("../db/index");
// 在头部区域导入 bcryptjs 后，
// 即可使用 bcrypt.compareSync(提交的密码，数据库中的密码) 方法验证密码是否正确
// compareSync() 函数的返回值为布尔值，true 表示密码正确，false 表示密码错误
const bcrypt = require("bcryptjs");

exports.getUserInfo = (req, res) => {
  // 根据用户的 id，查询用户的基本信息
  // 注意：为了防止用户的密码泄露，需要排除 password 字段
  const sql =
    "select id,username,nickname,email,user_pic from ev_users where id = ?";
  query(sql, req.user.id)
    .then((result) => {
      if (result.length !== 1) return res.cc("获取用户信息失败!");
      res.send({
        status: 0,
        message: "获取用户基本信息成功!",
        data: result[0],
      });
    })
    .catch((err) => res.cc(err));
};

exports.updateUserInfo = (req, res) => {
  const sql = "update ev_users set ? where id = ?;";
  query(sql, [req.body, req.body.id])
    .then((result) => {
      if (result.affectedRows !== 1) return res.cc("修改用户基本信息失败！");
      return res.cc("修改用户基本信息成功", 0);
    })
    .catch((err) => res.cc(err));
};

// 重置密码的处理函数
exports.updatePassword = (req, res) => {
  // 定义根据 id 查询用户数据的 SQL 语句
  const sql = "select * from ev_users where id = ?";
  query(sql, req.user.id)
    .then((result) => {
      if (result.length !== 1) return res.cc("用户不纯在！");
      // TODO：判断提交的旧密码是否正确
      const compareResult = bcrypt.compareSync(
        req.body.oldPwd,
        result[0].password
      );
      if (!compareResult) return res.cc("旧密码错误");
      // 定义更新用户密码的 SQL 语句
      const sql = "update ev_users set password = ? where id = ?";
      // 对新密码进行 bcrypt 加密处理
      const newPwd = bcrypt.hashSync(req.body.newPwd, 10);
      query(sql, [newPwd, req.user.id])
        .then((result) => {
          if (result.affectedRows !== 1) return res.cc("更新密码失败!");
          // res.cc("更新密码成功", 0);
          res.cc("更新密码成功", 0);
        })
        .catch((err) => res.cc(err));
    })
    .catch((err) => res.cc(err.message));
};

// 更新用户头像的处理函数
exports.updateAvatar = (req, res) => {
  const sql = "update ev_users set user_pic = ? where id = ?";
  query(sql, [req.body.avatar, req.user.id])
    .then((result) => {
      if (result.affectedRows !== 1) return res.cc("更新头像失败！");

      return res.cc("更行头像成功", 0);
    })
    .catch((err) => res.cc(err));
};
